package cn.iocoder.yudao.module.dr.service.collectionmanagement;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.dr.controller.admin.collectionmanagement.vo.CollectionImportRespVO;
import cn.iocoder.yudao.module.dr.controller.admin.collectionmanagement.vo.CollectionManagementPageReqVO;
import cn.iocoder.yudao.module.dr.controller.admin.collectionmanagement.vo.CollectionManagementRespVO;
import cn.iocoder.yudao.module.dr.controller.admin.collectionmanagement.vo.CollectionManagementSaveReqVO;
import cn.iocoder.yudao.module.dr.controller.admin.report.vo.index.DeptUseDataRespVO;
import cn.iocoder.yudao.module.dr.controller.admin.report.vo.index.FileTypeDataRespVO;
import cn.iocoder.yudao.module.dr.controller.admin.report.vo.index.SourceTypeDataRespVO;
import cn.iocoder.yudao.module.dr.controller.admin.report.vo.index.VisitDataRespVO;
import cn.iocoder.yudao.module.dr.dal.dataobject.collectionlinkaddress.CollectionLinkAddressDO;
import cn.iocoder.yudao.module.dr.dal.dataobject.collectionmanagement.CollectionManagementDO;
import jakarta.validation.Valid;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 藏品管理 Service 接口
 *
 * @author 管理员
 */
public interface CollectionManagementService {

    /**
     * 创建藏品管理
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CollectionManagementRespVO createCollectionManagement(@Valid CollectionManagementSaveReqVO createReqVO);

    /**
     * 更新藏品管理
     *
     * @param updateReqVO 更新信息
     */
    CollectionManagementRespVO updateCollectionManagement(@Valid CollectionManagementSaveReqVO updateReqVO);

    /**
     * 删除藏品管理
     *
     * @param id 编号
     */
    void deleteCollectionManagement(Long id);

    /**
     * 获得藏品管理
     *
     * @param id 编号
     * @return 藏品管理
     */
    CollectionManagementDO getCollectionManagement(Long id);

    /**
     * 获得藏品管理分页
     *
     * @param pageReqVO 分页查询
     * @return 藏品管理分页
     */
    PageResult<CollectionManagementDO> getCollectionManagementPage(CollectionManagementPageReqVO pageReqVO);


    CollectionManagementDO selectByGeneralAccessionNumber(String generalAccessionNumber);


    CollectionImportRespVO importDataList(MultipartFile file, Boolean updateSupport, Integer importType);
    /**
     * 获得藏品模型链接地址列表
     *
     * @param collectionId 藏品ID
     * @return 藏品模型链接地址列表
     */
    List<CollectionLinkAddressDO> getCollectionLinkAddressListByCollectionId(Long collectionId,String bizType);


    List<SourceTypeDataRespVO> countByLevel();

    List<FileTypeDataRespVO> countBySource();

    List<DeptUseDataRespVO> countByDegree();

    List<VisitDataRespVO> countByCategory();
}